import React, { useState, useEffect } from 'react'; import { Play, ChevronRight, CheckCircle, Star, ChefHat, BarChart3, ArrowLeft, LayoutDashboard, Volume2, ImageIcon, Video, User, LogOut, Info, Gamepad2, Home, Check, RotateCcw, Lock, Trophy, Lightbulb, Heart, Music, Printer, Sparkles, Rocket } from 'lucide-react'; // --- PILIHAN AVATAR --- const avatars = [ { id: 1, emoji: "๐Ÿ‘ฆ", label: "Lelaki 1" }, { id: 2, emoji: "๐Ÿ‘ง", label: "Perempuan 1" }, { id: 3, emoji: "๐Ÿง’", label: "Lelaki 2" }, { id: 4, emoji: "๐Ÿ‘ฉโ€๐Ÿฆฐ", label: "Perempuan 2" }, { id: 5, emoji: "๐Ÿ‘จโ€๐Ÿณ", label: "Chef" }, { id: 6, emoji: "๐Ÿ‘จโ€๐ŸŒพ", label: "Petani" }, { id: 7, emoji: "๐Ÿง‘โ€๐Ÿ”ฌ", label: "Scientist" }, { id: 8, emoji: "๐Ÿ‘จโ€๐ŸŽจ", label: "Artis" }, { id: 9, emoji: "๐Ÿ‘ฉโ€๐Ÿš€", label: "Angkasawan" }, { id: 10, emoji: "๐Ÿฆ", label: "Singa" }, { id: 11, emoji: "๐Ÿฆ„", label: "Unicorn" }, { id: 12, emoji: "๐Ÿฑ", label: "Kucing" }, ]; // --- SUB-KOMPONEN --- const Screen1Home = ({ studentName, setStudentName, setScreen, selectedAvatar, setSelectedAvatar }) => { return (
{selectedAvatar ? selectedAvatar.emoji : "๐Ÿ‘ค"}

TriCareer
MBPK

Bina Masa Depan Ceria! โœจ

{avatars.map(av => ( ))}

Pilih Karakter Anda

Selamat Datang! ๐Ÿ‘‹

Jom mula kembara kerjaya anda sekarang.

setStudentName(e.target.value)} className="w-full bg-white border-4 border-slate-100 rounded-3xl px-6 py-5 text-xl font-black text-slate-700 focus:border-pink-400 focus:ring-0 focus:outline-none transition-all shadow-xl shadow-purple-100/50" />
{!selectedAvatar && studentName.trim() &&

Sila pilih satu karakter di sebelah kiri

}
); }; const Screen2KenaliDiri = ({ studentName, setScreen, selectedAvatar }) => (
Kembara Baru

Hai {studentName.split(' ')[0]}! {selectedAvatar?.emoji}

Mari fahami minat anda melalui soalan bergambar yang seronok. Pilih jawapan ikut kata hati anda! โค๏ธ

Pilih YA, MUNGKIN atau TIDAK
Lihat ikon untuk faham soalan
{selectedAvatar?.emoji || "๐Ÿค”"}
); const Screen3Soalan = ({ currentQuestion, questions, handleAnswer }) => { const playQuestionAudio = (text) => { window.speechSynthesis.cancel(); const utterance = new SpeechSynthesisUtterance(text); utterance.lang = 'ms-MY'; window.speechSynthesis.speak(utterance); }; const onAnswer = (points) => { window.speechSynthesis.cancel(); handleAnswer(points); }; return (
{currentQuestion + 1} / {questions.length}
{questions[currentQuestion].icon}

{questions[currentQuestion].text}

{[ { p: 3, label: "YA", icon: "๐Ÿ˜Š", color: "from-green-400 to-emerald-600 shadow-green-200", sub: "Suka Sangat!" }, { p: 1, label: "MUNGKIN", icon: "๐Ÿ˜", color: "from-yellow-400 to-orange-500 shadow-yellow-200", sub: "Boleh Lah..." }, { p: 0, label: "TIDAK", icon: "๐Ÿ˜ž", color: "from-pink-500 to-red-600 shadow-pink-200", sub: "Tak Suka" } ].map((ans) => ( ))}
); }; const Screen4Profil = ({ studentName, scores, setScreen, resetApp, jobDetails, selectedAvatar }) => { const highest = Object.keys(scores).reduce((a, b) => scores[a] > scores[b] ? a : b); return (
Analisis Selesai

{selectedAvatar?.emoji} Profil {studentName.split(' ')[0]}

Keputusan Minat

{Object.entries(scores).map(([key, val]) => (
{jobDetails[key]?.icon} {jobDetails[key]?.title} {Math.round((val/15)*100)}%
))}
{selectedAvatar?.emoji}

Bidang Dominan

{jobDetails[highest]?.title}

{jobDetails[highest]?.intelligence}
); }; const Screen5Cadangan = ({ studentName, scores, setScreen, setSelectedJobId, jobDetails, isCompleted }) => { const highest = Object.keys(scores).reduce((a, b) => scores[a] > scores[b] ? a : b); const jobs = Object.keys(jobDetails).map(key => ({ id: key, ...jobDetails[key] })); return (

Penerokaan Kerjaya โœจ

Klik pada kad untuk melihat rahsia setiap pekerjaan!

{jobs.map(j => (
{ setSelectedJobId(j.id); setScreen('detail'); }} className={`group bg-white p-8 rounded-[3.5rem] shadow-xl cursor-pointer hover:shadow-2xl hover:-translate-y-2 transition-all flex flex-col items-center text-center relative border-4 ${isCompleted && j.id === highest ? 'border-blue-500 scale-105' : 'border-transparent'}`} > {isCompleted && j.id === highest ? (
TERBAIK! ๐Ÿ†
) : null}
{j.icon}

{j.title}

{j.intelligence}
Lihat Butiran
))}
); }; const Screen6Detail = ({ selectedJobId, jobDetails, setScreen }) => { const job = jobDetails[selectedJobId] || jobDetails.pembantu_dapur; return (
{job.icon}

Kecerdasan

{job.intelligence}

Bidang

{job.field}

{job.title}

Mengenai Kerjaya

{job.desc}

"

{job.quote}

Kemahiran Utama

{job.skills.map((skill, idx) => (
{skill}
))}
); }; const Screen7Simulasi = ({ selectedJobId, jobDetails, setScreen }) => { const [step, setStep] = useState(1); const job = jobDetails[selectedJobId] || jobDetails.pembantu_dapur; // --- DATA LANGKAH SIMULASI --- const stepsData = [ { id: 1, title: "Langkah 1: Sediakan Diri", desc: `Pastikan anda memakai pakaian yang sesuai dan bersihkan tangan sebelum memulakan tugasan ${job.title}.`, type: "image", src: selectedJobId === 'pembantu_ladang' ? "https://imgur.com/zhNsk9T.png" : selectedJobId === 'pembantu_dapur' ? "https://i.imgur.com/iB1SMD8.png" : selectedJobId === 'kru_pembersihan' ? "https://imgur.com/dm2i1Sh.png" : selectedJobId === 'pembantu_bakeri' ? "https://imgur.com/ILQfdlf.png" : selectedJobId === 'pereka_kraf' ? "https://imgur.com/NJAOKQ4.png" : selectedJobId === 'pembantu_stor' ? "https://imgur.com/tQ6NsuD.png" : selectedJobId === 'pembantu_pejabat' ? "https://imgur.com/OYdd0z8.png" : selectedJobId === 'pembantu_muzik' ? "https://imgur.com/kpDEXrc.png" : selectedJobId === 'pembantu_dobi' ? "https://imgur.com/1WE8BDG.png" : null }, { id: 2, title: "Langkah 2: Mulakan Tugasan", desc: `Lakukan tugasan harian dalam bidang ${job.field} mengikut arahan yang telah dipelajari.`, type: "image", src: selectedJobId === 'pembantu_ladang' ? "https://imgur.com/sfpRAOk.png" : selectedJobId === 'pembantu_dapur' ? "https://i.imgur.com/SFFRdqb.png" : selectedJobId === 'kru_pembersihan' ? "https://imgur.com/qgf1VXX.png" : selectedJobId === 'pembantu_bakeri' ? "https://imgur.com/n5qvqml.png" : selectedJobId === 'pereka_kraf' ? "https://imgur.com/Z4b0cRR.png" : selectedJobId === 'pembantu_stor' ? "https://imgur.com/Gp6X4Ke.png" : selectedJobId === 'pembantu_pejabat' ? "https://imgur.com/uriVbmY.png" : selectedJobId === 'pembantu_muzik' ? "https://imgur.com/jL4jvDf.png" : selectedJobId === 'pembantu_dobi' ? "https://imgur.com/i9QhHHo.png" : null }, { id: 3, title: "Langkah 3: Kemas Kawasan", desc: "Selesai tugasan? Pastikan semua peralatan dibersihkan dan disusun semula ke tempat asal.", type: "image", src: selectedJobId === 'pembantu_ladang' ? "https://imgur.com/lRTBIzf.png" : selectedJobId === 'pembantu_dapur' ? "https://i.imgur.com/aM1Azzc.png" : selectedJobId === 'kru_pembersihan' ? "https://imgur.com/57Xy2zn.png" : selectedJobId === 'pembantu_bakeri' ? "https://imgur.com/NAAmNrz.png" : selectedJobId === 'pereka_kraf' ? "https://imgur.com/oMalfs3.png" : selectedJobId === 'pembantu_stor' ? "https://imgur.com/Ep3TZO8.png" : selectedJobId === 'pembantu_pejabat' ? "https://imgur.com/0h8AV7l.png" : selectedJobId === 'pembantu_muzik' ? "https://imgur.com/4m00M35.png" : selectedJobId === 'pembantu_dobi' ? "https://imgur.com/JxOiwEP.png" : null } ]; const playSimulationAudio = () => { const currentStep = stepsData[step - 1]; const textToSpeak = `${currentStep.title}. ${currentStep.desc}`; window.speechSynthesis.cancel(); const utterance = new SpeechSynthesisUtterance(textToSpeak); utterance.lang = 'ms-MY'; window.speechSynthesis.speak(utterance); }; const currentStepData = stepsData[step - 1]; return (
{job.icon}

{job.title}

Mod Simulasi

{currentStepData.src ? (
{`Langkah { e.target.onerror = null; e.target.src = "https://placehold.co/600x400?text=Gambar+Langkah+" + step; }} />
) : (
{currentStepData.type === 'video' ?
)}
{[1, 2, 3].map(s => (
= s ? 'bg-blue-500 shadow-[0_0_15px_rgba(59,130,246,0.6)]' : 'bg-white/10'}`}>
))}
{step}

Prosedur Kerja

{currentStepData.title}

{currentStepData.desc}

{step < 3 ? ( ) : ( )}
); }; const Screen8Dashboard = ({ studentName, resetApp, selectedAvatar }) => { const handlePrint = () => { window.print(); }; return (
{selectedAvatar?.emoji || "๐Ÿ‘ค"}
Sijil Digital Selesai

{studentName || 'Nama Murid'}

Laporan Potensi TriCareer MBPK

Inventori: Lulus Simulasi: Cemerlang

Rumusan Potensi

"{studentName || 'Murid'} telah menunjukkan kesungguhan tinggi dalam meneroka minat kerjaya dan berjaya mengikut semua SOP simulasi kerja dengan sangat baik."

Tahap Ketersediaan Kerja

SEDIA AMALI

BERMULA 85% KESEDIAAN

Tandatangan Guru Pengiring

Tandatangan Penjaga

); }; // --- APLIKASI UTAMA --- const App = () => { const [screen, setScreen] = useState('home'); const [currentQuestion, setCurrentQuestion] = useState(0); const [selectedJobId, setSelectedJobId] = useState('pembantu_dapur'); const [studentName, setStudentName] = useState(''); const [selectedAvatar, setSelectedAvatar] = useState(null); const [isCompleted, setIsCompleted] = useState(false); const [scores, setScores] = useState({ pembantu_dapur: 0, pembantu_ladang: 0, kru_pembersihan: 0, pembantu_bakeri: 0, pereka_kraf: 0, pembantu_stor: 0, pembantu_pejabat: 0, pembantu_muzik: 0, pembantu_dobi: 0 }); const questions = [ { text: "Saya suka sukat air menggunakan cawan.", cat: "pembantu_dapur", icon: "๐Ÿฅ›" }, { text: "Saya suka susun pinggan ikut saiz.", cat: "pembantu_dapur", icon: "๐Ÿฝ๏ธ" }, { text: "Saya suka kira berapa biji telur ada.", cat: "pembantu_dapur", icon: "๐Ÿฅš" }, { text: "Saya suka ikut masa memasak (guna timer).", cat: "pembantu_dapur", icon: "โฒ๏ธ" }, { text: "Saya suka asingkan sayur ikut warna.", cat: "pembantu_dapur", icon: "๐Ÿฅฆ" }, { text: "Saya suka pegang tanah yang basah.", cat: "pembantu_ladang", icon: "๐Ÿชด" }, { text: "Saya suka siram pokok bunga pagi-pagi.", cat: "pembantu_ladang", icon: "๐Ÿšฟ" }, { text: "Saya suka cabut rumput liar di taman.", cat: "pembantu_ladang", icon: "๐ŸŒฟ" }, { text: "Saya suka tengok ulat atau rama-rama.", cat: "pembantu_ladang", icon: "๐Ÿฆ‹" }, { text: "Saya suka kutip buah yang sudah masak.", cat: "pembantu_ladang", icon: "๐ŸŽ" }, { text: "Saya suka sapu lantai sampai bersih.", cat: "kru_pembersihan", icon: "๐Ÿงน" }, { text: "Saya rasa tenang bila bilik kemas.", cat: "kru_pembersihan", icon: "โœจ" }, { text: "Saya suka cuci cermin sampai berkilat.", cat: "kru_pembersihan", icon: "๐ŸชŸ" }, { text: "Saya suka susun kasut dengan rapi.", cat: "kru_pembersihan", icon: "๐Ÿ‘Ÿ" }, { text: "Saya mahu pastikan tandas sentiah bersih.", cat: "kru_pembersihan", icon: "๐Ÿšฝ" }, { text: "Saya suka uli doh guna tangan.", cat: "pembantu_bakeri", icon: "๐Ÿฅฃ" }, { text: "Saya suka terap biskut guna acuan.", cat: "pembantu_bakeri", icon: "๐Ÿช" }, { text: "Saya suka sapu krim atas kek.", cat: "pembantu_bakeri", icon: "๐Ÿฐ" }, { text: "Saya suka susun roti dalam talam.", cat: "pembantu_bakeri", icon: "๐Ÿฑ" }, { text: "Saya suka pecahkan telur dalam mangkuk.", cat: "pembantu_bakeri", icon: "๐Ÿณ" }, { text: "Saya suka lukis gambar yang cantik.", cat: "pereka_kraf", icon: "๐ŸŽจ" }, { text: "Saya suka buat corak guna warna.", cat: "pereka_kraf", icon: "๐Ÿ–Œ๏ธ" }, { text: "Saya suka cantumkan kepingan puzzle.", cat: "pereka_kraf", icon: "๐Ÿงฉ" }, { text: "Saya suka buat cad ucapan sendiri.", cat: "pereka_kraf", icon: "โœ‰๏ธ" }, { text: "Saya suka gunting kertas jadi bentuk.", cat: "pereka_kraf", icon: "โœ‚๏ธ" }, { text: "Saya suka tolong kawan cari barang.", cat: "pembantu_stor", icon: "๐Ÿ”" }, { text: "Saya suka tegur orang dengan senyuman.", cat: "pembantu_stor", icon: "๐Ÿ˜Š" }, { text: "Saya suka kerja dalam kumpulan.", cat: "pembantu_stor", icon: "๐Ÿ‘ฅ" }, { text: "Saya suka susun kotak-kotak besar.", cat: "pembantu_stor", icon: "๐Ÿ“ฆ" }, { text: "Saya suka labelkan nama pada barang.", cat: "pembantu_stor", icon: "๐Ÿท๏ธ" }, { text: "Saya suka tulis nota dalam buku.", cat: "pembantu_pejabat", icon: "๐Ÿ“" }, { text: "Saya suka baca arahan pada kertas.", cat: "pembantu_pejabat", icon: "๐Ÿ“–" }, { text: "Saya suka bercerita dengan guru.", cat: "pembantu_pejabat", icon: "๐Ÿ—ฃ๏ธ" }, { text: "Saya suka susun fail ikut abjad (A,B,C).", cat: "pembantu_pejabat", icon: "๐Ÿ“‚" }, { text: "Saya suka hantar surat ke pejabat.", cat: "pembantu_pejabat", icon: "๐Ÿ“ฌ" }, { text: "Saya suka dengar bunyi muzik yang kuat.", cat: "pembantu_muzik", icon: "๐ŸŽถ" }, { text: "Saya suka tepuk tangan ikut rentak lagu.", cat: "pembantu_muzik", icon: "๐Ÿ‘" }, { text: "Saya suka susun alat muzik (seperti kompang).", cat: "pembantu_muzik", icon: "๐Ÿฅ" }, { text: "Saya suka simpan mikrofon dengan berhatihati.", cat: "pembantu_muzik", icon: "๐ŸŽค" }, { text: "Saya rasa seronok bila ada majlis nyanyian.", cat: "pembantu_muzik", icon: "๐ŸŽต" }, { text: "Saya suka bau baju yang wangi.", cat: "pembantu_dobi", icon: "๐Ÿ‘•" }, { text: "Saya suka lipat kain dengan kemas.", cat: "pembantu_dobi", icon: "๐Ÿงบ" }, { text: "Saya rasa puas bila bakul kosong.", cat: "pembantu_dobi", icon: "๐Ÿงบ" }, { text: "Saya mahu bantu orang pakai baju bersih.", cat: "pembantu_dobi", icon: "๐Ÿงผ" }, { text: "Saya suka asingkan baju ikut jenis.", cat: "pembantu_dobi", icon: "๐Ÿ‘”" }, ]; const jobDetails = { pembantu_dapur: { title: "Pembantu Dapur", field: "Perkhidmatan Makanan", intelligence: "Logik Matematik", icon: "๐Ÿณ", color: "bg-orange-100", accent: "text-orange-600", border: "border-orange-400", desc: "Membantu menyediakan bahan mentah, menguruskan inventori makanan, and memastikan kebersihan ruang memasak.", quote: "Sesuai untuk murid yang teliti dengan sukatan and suka menguruskan alatan.", skills: ["Ketepatan Masa", "Kebersihan", "Sukat Bahan"] }, pembantu_ladang: { title: "Pembantu Ladang", field: "Pertanian & Landskap", intelligence: "Naturalis", icon: "๐ŸŒฑ", color: "bg-emerald-100", accent: "text-emerald-600", border: "border-emerald-400", desc: "Melibatkan penjagaan tanaman, penyiraman, and pemeliharaan kawasan hijau di sekolah atau komuniti.", quote: "Sangat baik untuk murid yang suka aktiviti luar and menyayangi alam sekitar.", skills: ["Kekuatan Fizikal", "Ketabahan", "Suka Outdoor"] }, kru_pembersihan: { title: "Kru Pembersihan", field: "Perkhidmatan Awam", intelligence: "Intrapersonal", icon: "๐Ÿงน", color: "bg-sky-100", accent: "text-sky-600", border: "border-sky-400", desc: "Menjalankan tugasan pembersihan rutin untuk memastikan persekitaran sentiasa ceria and sihat.", quote: "Terbaik bagi murid yang mempunyai disiplin kendiri tinggi and suka kekemasan.", skills: ["Ketelitian", "Fokus", "Disiplin"] }, pembantu_bakeri: { title: "Pembantu Bakeri", field: "Pembuatan Makanan", intelligence: "Kinestetik", icon: "๐Ÿž", color: "bg-amber-100", accent: "text-amber-700", border: "border-amber-400", desc: "Fokus kepada aktiviti fizikal di dapur bakeri seperti menguli doh, membentuk biskut, and membungkus.", quote: "Menarik bagi murid yang aktif bergerak and mempunyai kemahiran motor halus.", skills: ["Motor Halus", "Kesabaran", "Kualiti"] }, pereka_kraf: { title: "Pereka Kraf", field: "Seni & Kreatif", intelligence: "Visual Ruang", icon: "๐ŸŽจ", color: "bg-indigo-100", accent: "text-indigo-600", border: "border-indigo-400", desc: "Menghasilkan barangan hiasan atau cenderamata kreatif menggunakan pelbagai bahan seni.", quote: "Sangat sesuai bagi murid yang mempunyai daya imaginasi and suka warna.", skills: ["Kreativiti", "Ketekunan", "Sua Seni"] }, pembantu_stor: { title: "Pembantu Stor", field: "Logistik & Runcit", intelligence: "Interpersonal", icon: "๐Ÿ“ฆ", color: "bg-rose-100", accent: "text-rose-600", border: "border-rose-400", desc: "Membantu menyusun stok barang, melabel, and bekerjasama dengan rakan sepasukan untuk mencari barang.", quote: "Peluang untuk murid bersosialisasi and bekerja dalam suasana berpasukan.", skills: ["Komunikasi", "Kerjasama", "Susun Atur"] }, pembantu_pejabat: { title: "Pembantu Pejabat", field: "Pentadbiran", intelligence: "Verbal Linguistik", icon: "๐Ÿ“", color: "bg-blue-100", accent: "text-blue-700", border: "border-blue-400", desc: "Tugas menyisih surat, memfailkan dokumen mudah, and membantu urusan komunikasi ringkas.", quote: "Sesuai bagi murid yang suka membaca, menulis, and mengikuti arahan bertulis.", skills: ["Literasi", "Ketepatan", "Susun Fail"] }, pembantu_muzik: { title: "Pembantu Studio/Muzik", field: "Seni Persembahan", intelligence: "Muzik", icon: "๐ŸŽธ", color: "bg-purple-100", accent: "text-purple-600", border: "border-purple-400", desc: "Menyediakan alatan muzik sebelum latihan, menyusun kerusi untuk persembahan, and membantu menjaga kebersihan studio muzik.", quote: "Sesuai bagi murid yang peka terhadap bunyi and sangat meminati dunia muzik.", skills: ["Irama", "Penjagaan Alatan", "Suka Muzik"] }, pembantu_dobi: { title: "Pembantu Dobi", field: "Perkhidmatan Dobi", intelligence: "Eksistensial", icon: "๐Ÿงบ", color: "bg-teal-100", accent: "text-teal-600", border: "border-teal-400", desc: "Mengasingkan pakaian, melipat kain dengan rapi, and membantu menguruskan bungkusan dobi.", quote: "Bagus untuk murid yang menghargai nilai sumbangan kepada orang lain melalui kebersihan.", skills: ["Lipatan Rapi", "Deria Bau", "Faham Nilai"] } }; const handleAnswer = (points) => { const category = questions[currentQuestion].cat; setScores(prev => ({ ...prev, [category]: prev[category] + points })); if (currentQuestion < questions.length - 1) { setCurrentQuestion(currentQuestion + 1); } else { setIsCompleted(true); setScreen('profil'); } }; const resetApp = () => { const initialScores = {}; Object.keys(jobDetails).forEach(key => initialScores[key] = 0); setScores(initialScores); setCurrentQuestion(0); setScreen('home'); setStudentName(''); setSelectedAvatar(null); setIsCompleted(false); }; const navItems = [ { id: 'home', label: 'Utama', icon: , locked: false }, { id: 'kenaliDiri', label: 'Mula', icon: , locked: true }, { id: 'soalan', label: 'Soalan', icon: , locked: true }, { id: 'profil', label: 'Profil', icon: , locked: false }, { id: 'cadangan', label: 'Bidang', icon: , locked: false }, { id: 'dashboard', label: 'Laporan', icon: , locked: true }, ]; return (
{screen === 'home' && ( )} {screen === 'kenaliDiri' && } {screen === 'soalan' && } {screen === 'profil' && } {screen === 'cadangan' && } {screen === 'detail' && } {screen === 'simulasi' && } {screen === 'dashboard' && }
); }; export default App;